home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / et / et-2_2.lha / et2.2 / src / AccessMem.C next >
C/C++ Source or Header  |  1990-11-28  |  2KB  |  91 lines

  1. #include "AccessMem.h"
  2. #include "System.h"
  3.  
  4. static void peekLength(void *p1, void *p2, void*, void*)
  5. {
  6.     *((int*) p1)= *((int*) p2);
  7. }
  8.  
  9. //---- AccessMembers ---------------------------------------------------------
  10.  
  11. AccessMembers::AccessMembers()
  12. {
  13. }
  14.  
  15. bool AccessMembers::IsObjPtr(int type, Class *cl)
  16.     return (type & T_PTR) && cl->TestFlag(eClassObject); 
  17. }
  18.  
  19. int AccessMembers::GetLength(Object *inObject, short lenOrOffset, int type)
  20. {
  21.     if (type & T_VEC) { 
  22.     int l= 0, *lp= (int*)((u_long)inObject + (u_long)lenOrOffset);
  23.     if (gSystem->Call(peekLength, (void*) &l, (void*) lp, 0, 0))
  24.         return -1;
  25.     return l;
  26.     }
  27.     if (type & T_ARR)
  28.     return lenOrOffset;
  29.     return -1;
  30. }
  31.  
  32. Object *AccessMembers::GetObject(Object *inObject, short offset, int type, Class *cl)
  33. {
  34.     if (cl->TestFlag(eClassObject) && (type & T_PTR))
  35.     return *(Object**)((unsigned long) inObject + (unsigned long) offset);
  36.     return 0;
  37. }
  38.  
  39. bool AccessMembers::IsObjPtrVec(int type, Class *cl)
  40. {
  41.     return cl->TestFlag(eClassObject) && (type&T_PTR2) && (type & (T_ARR|T_VEC));
  42. }
  43.  
  44. Object **AccessMembers::GetObjPtrVec(Object *inObject, short offset, int type, Class *cl)
  45. {
  46.     if (IsObjPtrVec(type, cl))
  47.     return *(Object***)((u_long) inObject + (u_long) offset);
  48.     return 0;
  49. }
  50.  
  51. void AccessMembers::ClassName(char*)
  52. {
  53. }
  54.  
  55. void AccessMembers::Member(char *name, short offset, short offsetOrLen, int type, Class *cl)
  56. {
  57. }
  58.  
  59. //---- AccessObjPtrs ----------------------------------------------------------
  60.  
  61. AccessObjPtrs::AccessObjPtrs(Object *op)
  62.     inObject= op; 
  63. }
  64.     
  65. void AccessObjPtrs::ForObject(Object *op)
  66.     inObject= op; 
  67. }
  68.  
  69. void AccessObjPtrs::Member(char *name, short offset, short offsetOrLen, int type, Class *cl)
  70. {
  71.     if (IsObjPtrVec(type, cl)) {
  72.     int l= GetLength(inObject, offsetOrLen, type);
  73.     Object **ov= GetObjPtrVec(inObject, offset, type, cl);
  74.     for (int i= 0; ov && i < l; i++) 
  75.         if (ov[i]) 
  76.         FoundPointer(ov[i], name, i);
  77.     }
  78.     else { 
  79.     if (IsObjPtr(type, cl)) {
  80.         FoundPointer(GetObject(inObject, offset, type, cl), name, -1);
  81.     } 
  82.     }
  83. }
  84.  
  85. void AccessObjPtrs::FoundPointer(Object *op, char*, int)
  86. {
  87. }
  88.